5 function procesar(n : integer) : integer;
\r
6 {Explicación del algoritmo:
\r
8 Para hallar la longitud del múltiplo más pequeño que sea una cadena de 1111's
\r
9 lo que hago es hallar primero el múltiplo que me da en la posición de las
\r
10 unidades un 1 (Nótese que por ser un múltiplo no divisible por 2 ó 5 al construir
\r
11 su tabla del 0 al 9 habrá un múltiplo que termina en 0, otro en 1, otro 2, ... y
\r
12 otro en 9). Una vez hallado el mútiplo que me da un 1 en las unidades, lo
\r
13 multiplico por N y lo que "lleva" lo acumulo en la variable carry e incremento
\r
14 la cuenta correspondiente al resultado. Ahora repito lo mismo, sólo que no tengo
\r
15 que encontrar el múltiplo que sus unidades sean 1 sino el múltiplo que al sumarle
\r
16 carry sus unidades sean 1. Esto se hace hasta que carry sea 0.
\r
20 tabla : Array[0..9] of integer;
\r
21 carry, multiplo, i, ultimaCifra : integer;
\r
33 while tabla[multiplo] mod 10 <> ultimaCifra do
\r
34 multiplo := multiplo + 1;
\r
36 carry := (n * multiplo + carry) div 10;
\r
39 while (i mod 10 <> 1) do
\r
41 ultimaCifra := i - carry;
\r
43 result := result + 1;
\r
54 writeLn(procesar(n));
\r